package gui.dialogs;

import gui.DBConnect;
import gui.Gui_main;
import gui.IntStr;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerDateModel;

import com.toedter.calendar.JDateChooser;

import dataTypes.Film;
import dataTypes.Jegytipus;
import dataTypes.Musor;
import dataTypes.Terem;

public class musorModositas {

	public static void CreateMusorModositoDialog(Musor musor, Film b_film) {
		//
		final DBConnect dbc = new DBConnect();
		final JDialog musormod = new JDialog(Gui_main.main, true);
		JPanel dialog = new JPanel(new GridLayout(5,2,0,10)), gombok = new JPanel();
		musormod.setLayout(new GridLayout(1, 2));
		final JComboBox film = new JComboBox();
		final JComboBox terem = new JComboBox();
		final JTextField musorid = new JTextField();
		final JDateChooser datumvalaszto = new JDateChooser();
		JLabel l_id = new JLabel("id"), l_film = new JLabel("Filmcím:"), l_datum = new JLabel("Dátum"), l_ido = new JLabel(
		"Kezdési idõ:"), l_terem = new JLabel("Terem:");
		JButton ok = new JButton("OK");
		JButton cancel = new JButton("Mégse");
		JButton delete = new JButton("Törlés");
		JButton discount = new JButton("Kedvezmények");
		//idő beállítása
		Date kezdido = new Date(musor.ido.getTime());
	
	//	Date felso = new Date(musor.datum.getTime());
		DateFormat df = new SimpleDateFormat("HH:mm");
	//értékek beállítása:
		//id
		musorid.setText(Integer.toString(musor.id));
		musorid.setEditable(false);
		//időpont
	    SpinnerDateModel sm = new SpinnerDateModel(kezdido, null, null , Calendar.HOUR);
		
	    final JSpinner ido = new JSpinner(sm);
	    JSpinner.DateEditor de = new JSpinner.DateEditor(ido, "HH:mm");
	    ido.setEditor(de);
	    //filmek
		Vector<IntStr> filmek = dbc.getFilmCimek();
		film.addItem(new IntStr(b_film.filmid, b_film.cim));
		for(int i=0;i<filmek.size();i++){
			if(filmek.get(i).getId()==b_film.filmid){

			}
			else{
				film.addItem(filmek.get(i));
			}
		}
		//termek
		Vector<Terem> termek = dbc.getTermek();
		for(int i=0;i<termek.size();i++){
			if(termek.get(i).Teremid==musor.terem){
				terem.addItem(termek.get(i));
			}
		}
		for(int i=0;i<termek.size();i++){
			if(termek.get(i).Teremid==musor.terem){
				
			}
			else{
				terem.addItem(termek.get(i));
			}
		}
		
		datumvalaszto.setDate(musor.datum);
		
		ok.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				Calendar c = Calendar.getInstance();
				c.setTime((Date) ido.getValue());
				c.set(Calendar.YEAR, 2011);
				c.set(Calendar.MONTH, 3);
				c.set(Calendar.DAY_OF_MONTH, 1);
				Timestamp t = new Timestamp(c.getTimeInMillis());
				
				
				int eredm=dbc.UpdateMusor(new Musor(Integer.parseInt(musorid.getText()),((IntStr) film.getSelectedItem()).getId(),datumvalaszto.getDate(),t,((Terem)terem.getSelectedItem()).Teremid));
				String kimenet;
				boolean bezar;
				switch(eredm){
				case 1:
					kimenet="Egy másik műsorral ütközést találtam! Törölje a műsort, vagy adjon meg más időpontot";
					bezar=false;
					break;
				case 2:
					kimenet="Nincs megadva dátum!";
					bezar=false;
					break;
				case 3:
					kimenet="Hibás film! Válasszon egy filmet a listából!";
					bezar=false;
					break;
				case 4:
					kimenet="Nincs terem! Kérem válasszon egy termet a listából!";
					bezar=false;
					break;
				case 5:
					kimenet="Nincs időpont! Kérem, adjon meg egy időpontot!";
					bezar=false;
					break;
				case -10:
					kimenet="Hiba történt az adatbázishoz kapcsolódéskor!";
					bezar=true;
					break;
				default:
					kimenet="Sikeres frissítés!";
					bezar=true;
					break;
				}
				JOptionPane.showMessageDialog(gui.Gui_main.main,
						kimenet,
					    "Információ",
					    JOptionPane.INFORMATION_MESSAGE);
				if(bezar){
					musormod.setEnabled(false);
					gui.main.Musor.regenerate();
					musormod.dispose();
				}
			
			
			}
			
		});
		cancel.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				musormod.setEnabled(false);
				musormod.dispose();
			}
			
		});
		delete.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				int eredm = JOptionPane.showConfirmDialog(musormod, "Biztosan törölni szeretné a műsoridőpontot?", "Törlés", JOptionPane.YES_NO_OPTION);
				if(eredm==0){
					int vissza= dbc.DeleteMusor(Integer.parseInt(musorid.getText()));
					String uzenet;
					switch(vissza){
					case -1:
						uzenet="Nincs ilyen műsor!";
						break;
					case -10:
						uzenet="Hiba az adatbázishoz kapcsolódásban!";
						break;
					default:
						uzenet="Sikeres törlés!";
					}
					JOptionPane.showMessageDialog(musormod, uzenet);
					musormod.setVisible(false);
					gui.main.Musor.regenerate();
					musormod.dispose();
				}
			}
			
		});
		discount.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				CreateKedvezmenyUpdate(Integer.parseInt(musorid.getText()),musormod);
			}
			
		});
		dialog.add(l_id);
		dialog.add(musorid);
		dialog.add(l_film);
		dialog.add(film);
		dialog.add(l_terem);
		dialog.add(terem);
		dialog.add(l_datum);
		dialog.add(datumvalaszto);
		dialog.add(l_ido);
		dialog.add(ido);
		
		gombok.add(ok);
		gombok.add(cancel);
		gombok.add(delete);
		gombok.add(discount);
		musormod.add(dialog);
		musormod.add(gombok);
		musormod.setSize(300, 200);
		musormod.setVisible(true);

	}
	public static void CreateMusorLetrehozoDialog() {
		//
		final DBConnect dbc = new DBConnect();
		final JDialog musormod = new JDialog(Gui_main.main, true);
		JPanel dialog = new JPanel(new GridLayout(4,2,0,10)), gombok = new JPanel();
		musormod.setLayout(new GridLayout(1, 2));
		final JComboBox film = new JComboBox();
		final JComboBox terem = new JComboBox();
		final JDateChooser datumvalaszto = new JDateChooser();
		JLabel l_film = new JLabel("Filmcím:"), l_datum = new JLabel("Dátum"), l_ido = new JLabel(
		"Kezdési idõ:"), l_terem = new JLabel("Terem:");
		JButton ok = new JButton("OK");
		JButton cancel = new JButton("Mégse");
		//idő beállítása
		Date kezdido = new Date();
	
	//	Date felso = new Date(musor.datum.getTime());
		DateFormat df = new SimpleDateFormat("HH:mm");
	//értékek beállítása:
		//időpont
	    SpinnerDateModel sm = new SpinnerDateModel(kezdido, null, null , Calendar.HOUR);
		
	    final JSpinner ido = new JSpinner(sm);
	    JSpinner.DateEditor de = new JSpinner.DateEditor(ido, "HH:mm");
	    ido.setEditor(de);
	    //filmek
		Vector<IntStr> filmek = dbc.getFilmCimek();
		
		for(int i=0;i<filmek.size();i++){
				film.addItem(filmek.get(i));
		}
		//termek
		Vector<Terem> termek = dbc.getTermek();
		for(int i=0;i<termek.size();i++){
			terem.addItem(termek.get(i));
		}
		
		datumvalaszto.setDate(new Date());
		
		ok.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				Calendar c = Calendar.getInstance();
				c.setTime((Date) ido.getValue());
				c.set(Calendar.YEAR, 2011);
				c.set(Calendar.MONTH, 3);
				c.set(Calendar.DAY_OF_MONTH, 1);
				Timestamp t = new Timestamp(c.getTimeInMillis());
				
				
				int eredm=dbc.AddMusor(new Musor(0,((IntStr) film.getSelectedItem()).getId(),datumvalaszto.getDate(),t,((Terem)terem.getSelectedItem()).Teremid));
				String kimenet;
				boolean bezar;
				switch(eredm){
				case 1:
					kimenet="Egy másik műsorral ütközést találtam! Törölje a műsort, vagy adjon meg más időpontot";
					bezar=false;
					break;
				case 2:
					kimenet="Nincs megadva dátum!";
					bezar=false;
					break;
				case 3:
					kimenet="Hibás film! Válasszon egy filmet a listából!";
					bezar=false;
					break;
				case 4:
					kimenet="Nincs terem! Kérem válasszon egy termet a listából!";
					bezar=false;
					break;
				case 5:
					kimenet="Nincs időpont! Kérem, adjon meg egy időpontot!";
					bezar=false;
					break;
				case -10:
					kimenet="Hiba történt az adatbázishoz kapcsolódéskor!";
					bezar=true;
					break;
				default:
					kimenet="Sikeres hozzáadás!";
					bezar=true;
					break;
				}
				JOptionPane.showMessageDialog(gui.Gui_main.main,
						kimenet,
					    "Információ",
					    JOptionPane.INFORMATION_MESSAGE);
				if(bezar){
					musormod.setEnabled(false);
					gui.main.Musor.regenerate();
					musormod.dispose();
				}
			
			
			}
			
		});
		cancel.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				musormod.setEnabled(false);
				musormod.dispose();
			}
			
		});
		
		dialog.add(l_film);
		dialog.add(film);
		dialog.add(l_terem);
		dialog.add(terem);
		dialog.add(l_datum);
		dialog.add(datumvalaszto);
		dialog.add(l_ido);
		dialog.add(ido);
		
		gombok.add(ok);
		gombok.add(cancel);
		musormod.add(dialog);
		musormod.add(gombok);
		musormod.setSize(300, 200);
		musormod.setVisible(true);

	}
	
	public static void CreateKedvezmenyUpdate(final int musorid, JDialog mother){
		class Jegy{
			public JCheckBox check;
			public Jegytipus jt;
			public Jegy(Jegytipus j){
				this.jt = j;
				this.check = new JCheckBox(jt.jegytipusnev);
			}
		}
		final JDialog kedv = new JDialog(mother,true);
		JPanel p = new JPanel();
		JPanel gombok = new JPanel();
		final DBConnect dbc = new DBConnect();
		JButton ok = new JButton("OK");
		JButton cancel = new JButton("Mégse");
		Vector<Jegytipus> jegyek = dbc.getJegytipusok();
		Vector<Integer> musorjegyek = dbc.getJegytipusForMusor(musorid);
		final Jegy []jegytipusok = new Jegy[jegyek.size()];
		cancel.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				kedv.setVisible(false);
				kedv.dispose();
			}
		
		});
		ok.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				Vector<Integer> elkuldendo = new Vector<Integer>();
				for(int i=0;i<jegytipusok.length;i++){
					if(jegytipusok[i].check.isSelected()){
						elkuldendo.add(jegytipusok[i].jt.id);
					}
				}
				dbc.UpdateMusorArak(elkuldendo, musorid);
				JOptionPane.showMessageDialog(kedv, "Sikeresen módosítva.");
				kedv.setVisible(false);
				kedv.dispose();
			}
			
		});
		for(int i=0;i<jegyek.size();i++){
			jegytipusok[i]=new Jegy(jegyek.get(i));
			p.add(jegytipusok[i].check);
		}
		for(int i=0;i<musorjegyek.size();i++){
			if(jegytipusok[i].jt.id==musorjegyek.get(i)){
				jegytipusok[i].check.setSelected(true);
			}
		}
		p.setLayout(new GridLayout(jegyek.size()+1,1));
		gombok.add(cancel);
		gombok.add(ok);
		p.add(gombok);
		kedv.add(p);
		kedv.setSize(300, 200);
		kedv.setVisible(true);
	}

}
